import type { AssetPathResolver } from "@Core/AssetPathResolver";
import type { SystemSetting } from "./SystemSetting";
import type { SystemSettingRepository } from "./SystemSettingRepository";
import { WindowsSystemSetting } from "./WindowsSystemSetting";

export class WindowsSystemSettingsRepository implements SystemSettingRepository {
    public constructor(private readonly assetPathResolver: AssetPathResolver) {}

    public getAll(): SystemSetting[] {
        return [
            new WindowsSystemSetting("System Settings", "ms-settings:", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Access work or school", "ms-settings:workplace", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Email & app accounts",
                "ms-settings:emailandaccounts",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Family & other people", "ms-settings:otherusers", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Set up a kiosk", "ms-settings:assignedaccess", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Sign-in options", "ms-settings:signinoptions", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Sync your settings", "ms-settings:sync", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Windows Hello setup",
                "ms-settings:signinoptions-launchfaceenrollment",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Your info", "ms-settings:yourinfo", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Apps & Features", "ms-settings:appsfeatures", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Apps for websites",
                "ms-settings:appsforwebsites",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Default apps", "ms-settings:defaultapps", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Manage optional features",
                "ms-settings:optionalfeatures",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Offline Maps", "ms-settings:maps", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Startup apps", "ms-settings:startupapps", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Video playback", "ms-settings:videoplayback", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Control center", "ms-settings:controlcenter$", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Cortana across my devices",
                "ms-settings:cortana-notifications",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("More details", "ms-settings:cortana-moredetails", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Permissions & History",
                "ms-settings:cortana-permissions",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Talk to Cortana", "ms-settings:cortana", this.getGenericImageFilePath()),
            new WindowsSystemSetting("AutoPlay", "ms-settings:autoplay", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Bluetooth", "ms-settings:bluetooth", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Connected Devices",
                "ms-settings:connecteddevices",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Camera settings", "ms-settings:camera", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Mouse & touchpad", "ms-settings:mousetouchpad", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Pen & Windows Ink", "ms-settings:pen", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Printers & scanners", "ms-settings:printers", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Touch", "ms-settings:devices-touch", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Touchpad", "ms-settings:devices-touchpad", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Text Suggestions",
                "ms-settings:devicestyping-hwkbtextsuggestions",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Typing", "ms-settings:typing", this.getGenericImageFilePath()),
            new WindowsSystemSetting("USB", "ms-settings:usb", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Wheel", "ms-settings:wheel", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Audio", "ms-settings:easeofaccess-audio", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Closed captions",
                "ms-settings:easeofaccess-closedcaptioning",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Color filters",
                "ms-settings:easeofaccess-colorfilter",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Eye control",
                "ms-settings:easeofaccess-eyecontrol",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Fonts", "ms-settings:fonts", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "High contrast",
                "ms-settings:easeofaccess-highcontrast",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Keyboard", "ms-settings:easeofaccess-keyboard", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Magnifier", "ms-settings:easeofaccess-magnifier", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Mouse", "ms-settings:easeofaccess-mouse", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Mouse pointer & touch",
                "ms-settings:easeofaccess-mousepointer",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Narrator", "ms-settings:easeofaccess-narrator", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Text cursor", "ms-settings:easeofaccess-cursor", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Visual Effects",
                "ms-settings:easeofaccess-visualeffects",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Extras", "ms-settings:extras", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Family Group", "ms-settings:family-group", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Game bar", "ms-settings:gaming-gamebar", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Game DVR", "ms-settings:gaming-gamedvr", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Game Mode", "ms-settings:gaming-gamemode", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Playing a game full screen",
                "ms-settings:quietmomentsgame",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("TruePlay", "ms-settings:gaming-trueplay", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Headset display",
                "ms-settings:holographic-headset",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Uninstall", "ms-settings:holographic-management", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Startup and desktop",
                "ms-settings:holographic-startupandesktop",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Network & internet",
                "ms-settings:network-status",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Advanced settings",
                "ms-settings:network-advancedsettings",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Airplane mode",
                "ms-settings:network-airplanemode",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Cellular & SIM", "ms-settings:network-cellular", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Dial-up", "ms-settings:network-dialup", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "DirectAccess",
                "ms-settings:network-directaccess",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Ethernet", "ms-settings:network-ethernet", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Manage known networks",
                "ms-settings:network-wifisettings",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Mobile hotspot",
                "ms-settings:network-mobilehotspot",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Proxy", "ms-settings:network-proxy", this.getGenericImageFilePath()),
            new WindowsSystemSetting("VPN", "ms-settings:network-vpn", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Wi-Fi", "ms-settings:network-wifi", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Wi-Fi provisioning",
                "ms-settings:wifi-provisioning",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Background",
                "ms-settings:personalization-background",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Choose which folders appear on Start",
                "ms-settings:personalization-start-places",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Colors", "ms-settings:colors", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Lock screen", "ms-settings:lockscreen", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Personalization (category)",
                "ms-settings:personalization",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Start", "ms-settings:personalization-start", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Touch Keyboard",
                "ms-settings:personalization-touchkeyboard",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Themes", "ms-settings:themes", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Your phone", "ms-settings:mobile-devices", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Device Usage", "ms-settings:deviceusage", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Privacy & Security", "ms-settings:privacy", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Search", "ms-settings:search", this.getGenericImageFilePath()),
            new WindowsSystemSetting("About", "ms-settings:about", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Advanced display settings",
                "ms-settings:display-advanced",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "App volume and device preferences",
                "ms-settings:apps-volume (Added in Windows 10, version 1903)",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Battery Saver", "ms-settings:batterysaver", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Battery Saver settings",
                "ms-settings:batterysaver-settings",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Battery use",
                "ms-settings:batterysaver-usagedetails",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Clipboard", "ms-settings:clipboard", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Display", "ms-settings:display", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Default Save Locations",
                "ms-settings:savelocations",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Duplicating my display",
                "ms-settings:quietmomentspresentation",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "During these hours",
                "ms-settings:quietmomentsscheduled",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Encryption", "ms-settings:deviceencryption", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Energy recommendatations",
                "ms-settings:energyrecommendations",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Focus assist", "ms-settings:quiethours", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Graphics Settings",
                "ms-settings:display-advancedgraphics",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Graphics Default Settings",
                "ms-settings:display-advancedgraphics-default",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Multitasking", "ms-settings:multitasking", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Night light settings", "ms-settings:nightlight", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Projecting to this PC", "ms-settings:project", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Shared experiences", "ms-settings:crossdevice", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Taskbar", "ms-settings:taskbar", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Notifications & actions",
                "ms-settings:notifications",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Remote Desktop", "ms-settings:remotedesktop", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Power & sleep", "ms-settings:powersleep", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Presence sensing", "ms-settings:presence", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Sound", "ms-settings:sound", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Sound devices", "ms-settings:sound-devices", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Storage", "ms-settings:storagesense", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Storage Sense", "ms-settings:storagepolicies", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Storage recommendations",
                "ms-settings:storagerecommendations",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Disks & volumes", "ms-settings:disksandvolumes", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Date & time", "ms-settings:dateandtime", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Region", "ms-settings:regionformatting", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Language", "ms-settings:keyboard", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Speech", "ms-settings:speech", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Add display language",
                "ms-settings:regionlanguage-adddisplaylanguage",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Language options",
                "ms-settings:regionlanguage-languageoptions",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Set display language",
                "ms-settings:regionlanguage-setdisplaylanguage",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Activation", "ms-settings:activation", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Delivery Optimization",
                "ms-settings:delivery-optimization",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Find My Device", "ms-settings:findmydevice", this.getGenericImageFilePath()),
            new WindowsSystemSetting("For developers", "ms-settings:developers", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Recovery", "ms-settings:recovery", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Launch Security Key Enrollment",
                "ms-settings:signinoptions-launchsecuritykeyenrollment",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Troubleshoot", "ms-settings:troubleshoot", this.getGenericImageFilePath()),
            new WindowsSystemSetting("Windows Security", "ms-settings:windowsdefender", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Windows Insider Program",
                "ms-settings:windowsinsider",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Windows Update", "ms-settings:windowsupdate", this.getGenericImageFilePath()),
            new WindowsSystemSetting(
                "Provisioning",
                "ms-settings:workplace-provisioning",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting(
                "Repair token",
                "ms-settings:workplace-repairtoken",
                this.getGenericImageFilePath(),
            ),
            new WindowsSystemSetting("Windows Anywhere", "ms-settings:windowsanywhere", this.getGenericImageFilePath()),
        ];
    }

    private getGenericImageFilePath(): string {
        return this.assetPathResolver.getExtensionAssetPath("SystemSettings", "windows-11-settings.png");
    }
}
